using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._AviationTools._Airports._Analysis
{
    /// <summary>
    /// <para>Analyze Airport Features</para>
    /// <para>Analyzes specified point features around an airfield to find and record information such as distance from a given runway centerline or the end of the nearest runway, and the designation for that nearest runway.</para>
    /// <para>分析机场周围的指定点要素，以查找和记录信息，例如与给定跑道中心线或最近跑道末端的距离，以及该最近跑道的名称。</para>
    /// </summary>    
    [DisplayName("Analyze Airport Features")]
    public class AnalyzeAirportFeatures : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public AnalyzeAirportFeatures()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_features">
        /// <para>Input Features</para>
        /// <para>The input point features that will be analyzed and recorded, in terms of their physical relationships to features in the other inputs.</para>
        /// <para>将分析和记录的输入点要素，以及它们与其他输入要素的物理关系。</para>
        /// </param>
        /// <param name="_in_runway_features">
        /// <para>Input Runway Features</para>
        /// <para>The input runway polyline features, specifically their centerlines, that will be used in the analysis.</para>
        /// <para>将在分析中使用的输入跑道折线要素，特别是其中心线。</para>
        /// </param>
        /// <param name="_out_table">
        /// <para>Output Table</para>
        /// <para>The output table, with a row for each input airport feature, containing the analytical results.</para>
        /// <para>输出表，每个输入机场要素各有一行，包含分析结果。</para>
        /// </param>
        public AnalyzeAirportFeatures(object _in_features, object _in_runway_features, object _out_table)
        {
            this._in_features = _in_features;
            this._in_runway_features = _in_runway_features;
            this._out_table = _out_table;
        }
        public override string ToolboxName => "Aviation Tools";

        public override string ToolName => "Analyze Airport Features";

        public override string CallName => "aviation.AnalyzeAirportFeatures";

        public override List<string> AcceptEnvironments => [];

        public override object[] ParameterInfo => [_in_features, _in_runway_features, _out_table, _in_features_height, _in_features_height_unit.GetGPValue(), _runway_end_features, _airport_ref_point_features, _ref_point_height, _ref_point_height_unit.GetGPValue()];

        /// <summary>
        /// <para>Input Features</para>
        /// <para>The input point features that will be analyzed and recorded, in terms of their physical relationships to features in the other inputs.</para>
        /// <para>将分析和记录的输入点要素，以及它们与其他输入要素的物理关系。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Features")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_features { get; set; }


        /// <summary>
        /// <para>Input Runway Features</para>
        /// <para>The input runway polyline features, specifically their centerlines, that will be used in the analysis.</para>
        /// <para>将在分析中使用的输入跑道折线要素，特别是其中心线。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Runway Features")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_runway_features { get; set; }


        /// <summary>
        /// <para>Output Table</para>
        /// <para>The output table, with a row for each input airport feature, containing the analytical results.</para>
        /// <para>输出表，每个输入机场要素各有一行，包含分析结果。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Table")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _out_table { get; set; }


        /// <summary>
        /// <para>Input Features Height</para>
        /// <para><xdoc>
        ///   <para>The name of a field in the input airport features dataset. The specified field must contain numeric values. The values in this field will be used to identify the height of each input airport feature.</para>
        ///   <bulletList>
        ///     <bullet_item>SHAPE_Z—Height values will be derived from the z-values of the input point features. This is the default.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>输入机场要素数据集中的字段名称。指定的字段必须包含数值。此字段中的值将用于标识每个输入机场要素的高度。</para>
        ///   <bulletList>
        ///     <bullet_item>SHAPE_Z—高度值将派生自输入点要素的 z 值。这是默认设置。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Features Height")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _in_features_height { get; set; } = null;


        /// <summary>
        /// <para>Input Features Height Unit</para>
        /// <para><xdoc>
        ///   <para>Specifies the linear unit of measure that will be used when the Input Features Height parameter is specified.</para>
        ///   <bulletList>
        ///     <bullet_item>Kilometers—Kilometers</bullet_item><para/>
        ///     <bullet_item>Meters—Meters</bullet_item><para/>
        ///     <bullet_item>Decimeters—Decimeters</bullet_item><para/>
        ///     <bullet_item>Centimeters—Centimeters</bullet_item><para/>
        ///     <bullet_item>Millimeters—Millimeters</bullet_item><para/>
        ///     <bullet_item>Nautical Miles—Nautical miles</bullet_item><para/>
        ///     <bullet_item>Miles—Miles</bullet_item><para/>
        ///     <bullet_item>Yards—Yards</bullet_item><para/>
        ///     <bullet_item>Feet—Feet</bullet_item><para/>
        ///     <bullet_item>Inches—Inches</bullet_item><para/>
        ///     <bullet_item>Decimal Degrees—Decimal degrees</bullet_item><para/>
        ///     <bullet_item>Points—Points</bullet_item><para/>
        ///     <bullet_item>Unknown—Unknown</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定指定输入要素高度参数时将使用的线性测量单位。</para>
        ///   <bulletList>
        ///     <bullet_item>公里 - 公里</bullet_item><para/>
        ///     <bullet_item>米 - 米</bullet_item><para/>
        ///     <bullet_item>分米 - 分米</bullet_item><para/>
        ///     <bullet_item>厘米—厘米</bullet_item><para/>
        ///     <bullet_item>毫米 - 毫米</bullet_item><para/>
        ///     <bullet_item>海里—海里</bullet_item><para/>
        ///     <bullet_item>英里 - 英里</bullet_item><para/>
        ///     <bullet_item>码 - 码</bullet_item><para/>
        ///     <bullet_item>英尺 - 英尺</bullet_item><para/>
        ///     <bullet_item>英寸—英寸</bullet_item><para/>
        ///     <bullet_item>十进制度 - 十进制度</bullet_item><para/>
        ///     <bullet_item>点—点</bullet_item><para/>
        ///     <bullet_item>未知 - 未知</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Features Height Unit")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _in_features_height_unit_value _in_features_height_unit { get; set; } = _in_features_height_unit_value._METERS;

        public enum _in_features_height_unit_value
        {
            /// <summary>
            /// <para>Kilometers</para>
            /// <para>Kilometers—Kilometers</para>
            /// <para>公里 - 公里</para>
            /// </summary>
            [Description("Kilometers")]
            [GPEnumValue("KILOMETERS")]
            _KILOMETERS,

            /// <summary>
            /// <para>Meters</para>
            /// <para>Meters—Meters</para>
            /// <para>米 - 米</para>
            /// </summary>
            [Description("Meters")]
            [GPEnumValue("METERS")]
            _METERS,

            /// <summary>
            /// <para>Decimeters</para>
            /// <para>Decimeters—Decimeters</para>
            /// <para>分米 - 分米</para>
            /// </summary>
            [Description("Decimeters")]
            [GPEnumValue("DECIMETERS")]
            _DECIMETERS,

            /// <summary>
            /// <para>Centimeters</para>
            /// <para>Centimeters—Centimeters</para>
            /// <para>厘米—厘米</para>
            /// </summary>
            [Description("Centimeters")]
            [GPEnumValue("CENTIMETERS")]
            _CENTIMETERS,

            /// <summary>
            /// <para>Millimeters</para>
            /// <para>Millimeters—Millimeters</para>
            /// <para>毫米 - 毫米</para>
            /// </summary>
            [Description("Millimeters")]
            [GPEnumValue("MILLIMETERS")]
            _MILLIMETERS,

            /// <summary>
            /// <para>Nautical Miles</para>
            /// <para>Nautical Miles—Nautical miles</para>
            /// <para>海里—海里</para>
            /// </summary>
            [Description("Nautical Miles")]
            [GPEnumValue("NAUTICAL_MILES")]
            _NAUTICAL_MILES,

            /// <summary>
            /// <para>Miles</para>
            /// <para>Miles—Miles</para>
            /// <para>英里 - 英里</para>
            /// </summary>
            [Description("Miles")]
            [GPEnumValue("MILES")]
            _MILES,

            /// <summary>
            /// <para>Yards</para>
            /// <para>Yards—Yards</para>
            /// <para>码 - 码</para>
            /// </summary>
            [Description("Yards")]
            [GPEnumValue("YARDS")]
            _YARDS,

            /// <summary>
            /// <para>Feet</para>
            /// <para>Feet—Feet</para>
            /// <para>英尺 - 英尺</para>
            /// </summary>
            [Description("Feet")]
            [GPEnumValue("FEET")]
            _FEET,

            /// <summary>
            /// <para>Inches</para>
            /// <para>Inches—Inches</para>
            /// <para>英寸—英寸</para>
            /// </summary>
            [Description("Inches")]
            [GPEnumValue("INCHES")]
            _INCHES,

            /// <summary>
            /// <para>Decimal Degrees</para>
            /// <para>Decimal Degrees—Decimal degrees</para>
            /// <para>十进制度 - 十进制度</para>
            /// </summary>
            [Description("Decimal Degrees")]
            [GPEnumValue("DECIMAL_DEGREES")]
            _DECIMAL_DEGREES,

            /// <summary>
            /// <para>Points</para>
            /// <para>Points—Points</para>
            /// <para>点—点</para>
            /// </summary>
            [Description("Points")]
            [GPEnumValue("POINTS")]
            _POINTS,

            /// <summary>
            /// <para>Unknown</para>
            /// <para>Unknown—Unknown</para>
            /// <para>未知 - 未知</para>
            /// </summary>
            [Description("Unknown")]
            [GPEnumValue("UNKNOWN")]
            _UNKNOWN,

        }

        /// <summary>
        /// <para>Runway End Features</para>
        /// <para>The input runway end point features associated with the runways in the Input Features Height Unit parameter that represent the thresholds of those runways.</para>
        /// <para>与输入要素高度单位参数中的跑道关联的输入跑道端点要素，表示这些跑道的阈值。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Runway End Features")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _runway_end_features { get; set; } = null;


        /// <summary>
        /// <para>Airport Reference Point Features</para>
        /// <para>The input airport reference point features that define the center point of an airport, located at the geometric center of all the usable runways and computed as a weighted average of the end of runway coordinates.</para>
        /// <para>用于定义机场中心点的输入机场参考点要素，该机场位于所有可用跑道的几何中心，计算为跑道坐标末端的加权平均值。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Airport Reference Point Features")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _airport_ref_point_features { get; set; } = null;


        /// <summary>
        /// <para>Airport Reference Point Height</para>
        /// <para><xdoc>
        ///   <para>The name of a field in the input airport reference point features dataset. The specified field must contain numeric values. The values in this field will be used to identify the height of each input airport reference point feature.</para>
        ///   <bulletList>
        ///     <bullet_item>SHAPE_Z—The z-value of each point. This is the default.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>输入机场参考点要素数据集中的字段名称。指定的字段必须包含数值。此字段中的值将用于标识每个输入机场参考点要素的高度。</para>
        ///   <bulletList>
        ///     <bullet_item>SHAPE_Z - 每个点的 z 值。这是默认设置。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Airport Reference Point Height")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _ref_point_height { get; set; } = null;


        /// <summary>
        /// <para>Airport Reference Point Height Unit</para>
        /// <para><xdoc>
        ///   <para>The linear unit of measure that will be used when the airport reference point height is specified.</para>
        ///   <bulletList>
        ///     <bullet_item>Kilometers—Kilometers</bullet_item><para/>
        ///     <bullet_item>Meters—Meters</bullet_item><para/>
        ///     <bullet_item>Decimeters—Decimeters</bullet_item><para/>
        ///     <bullet_item>Centimeters—Centimeters</bullet_item><para/>
        ///     <bullet_item>Millimeters—Millimeters</bullet_item><para/>
        ///     <bullet_item>Nautical Miles—Nautical miles</bullet_item><para/>
        ///     <bullet_item>Miles—Miles</bullet_item><para/>
        ///     <bullet_item>Yards—Yards</bullet_item><para/>
        ///     <bullet_item>Feet—Feet</bullet_item><para/>
        ///     <bullet_item>Inches—Inches</bullet_item><para/>
        ///     <bullet_item>Decimal Degrees—Decimal degrees</bullet_item><para/>
        ///     <bullet_item>Points—Points</bullet_item><para/>
        ///     <bullet_item>Unknown—Unknown</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定机场参考点高度时将使用的线性测量单位。</para>
        ///   <bulletList>
        ///     <bullet_item>公里 - 公里</bullet_item><para/>
        ///     <bullet_item>米 - 米</bullet_item><para/>
        ///     <bullet_item>分米 - 分米</bullet_item><para/>
        ///     <bullet_item>厘米—厘米</bullet_item><para/>
        ///     <bullet_item>毫米 - 毫米</bullet_item><para/>
        ///     <bullet_item>海里—海里</bullet_item><para/>
        ///     <bullet_item>英里 - 英里</bullet_item><para/>
        ///     <bullet_item>码 - 码</bullet_item><para/>
        ///     <bullet_item>英尺 - 英尺</bullet_item><para/>
        ///     <bullet_item>英寸—英寸</bullet_item><para/>
        ///     <bullet_item>十进制度 - 十进制度</bullet_item><para/>
        ///     <bullet_item>点—点</bullet_item><para/>
        ///     <bullet_item>未知 - 未知</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Airport Reference Point Height Unit")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _ref_point_height_unit_value _ref_point_height_unit { get; set; } = _ref_point_height_unit_value._METERS;

        public enum _ref_point_height_unit_value
        {
            /// <summary>
            /// <para>Kilometers</para>
            /// <para>Kilometers—Kilometers</para>
            /// <para>公里 - 公里</para>
            /// </summary>
            [Description("Kilometers")]
            [GPEnumValue("KILOMETERS")]
            _KILOMETERS,

            /// <summary>
            /// <para>Meters</para>
            /// <para>Meters—Meters</para>
            /// <para>米 - 米</para>
            /// </summary>
            [Description("Meters")]
            [GPEnumValue("METERS")]
            _METERS,

            /// <summary>
            /// <para>Decimeters</para>
            /// <para>Decimeters—Decimeters</para>
            /// <para>分米 - 分米</para>
            /// </summary>
            [Description("Decimeters")]
            [GPEnumValue("DECIMETERS")]
            _DECIMETERS,

            /// <summary>
            /// <para>Centimeters</para>
            /// <para>Centimeters—Centimeters</para>
            /// <para>厘米—厘米</para>
            /// </summary>
            [Description("Centimeters")]
            [GPEnumValue("CENTIMETERS")]
            _CENTIMETERS,

            /// <summary>
            /// <para>Millimeters</para>
            /// <para>Millimeters—Millimeters</para>
            /// <para>毫米 - 毫米</para>
            /// </summary>
            [Description("Millimeters")]
            [GPEnumValue("MILLIMETERS")]
            _MILLIMETERS,

            /// <summary>
            /// <para>Nautical Miles</para>
            /// <para>Nautical Miles—Nautical miles</para>
            /// <para>海里—海里</para>
            /// </summary>
            [Description("Nautical Miles")]
            [GPEnumValue("NAUTICAL_MILES")]
            _NAUTICAL_MILES,

            /// <summary>
            /// <para>Miles</para>
            /// <para>Miles—Miles</para>
            /// <para>英里 - 英里</para>
            /// </summary>
            [Description("Miles")]
            [GPEnumValue("MILES")]
            _MILES,

            /// <summary>
            /// <para>Yards</para>
            /// <para>Yards—Yards</para>
            /// <para>码 - 码</para>
            /// </summary>
            [Description("Yards")]
            [GPEnumValue("YARDS")]
            _YARDS,

            /// <summary>
            /// <para>Feet</para>
            /// <para>Feet—Feet</para>
            /// <para>英尺 - 英尺</para>
            /// </summary>
            [Description("Feet")]
            [GPEnumValue("FEET")]
            _FEET,

            /// <summary>
            /// <para>Inches</para>
            /// <para>Inches—Inches</para>
            /// <para>英寸—英寸</para>
            /// </summary>
            [Description("Inches")]
            [GPEnumValue("INCHES")]
            _INCHES,

            /// <summary>
            /// <para>Decimal Degrees</para>
            /// <para>Decimal Degrees—Decimal degrees</para>
            /// <para>十进制度 - 十进制度</para>
            /// </summary>
            [Description("Decimal Degrees")]
            [GPEnumValue("DECIMAL_DEGREES")]
            _DECIMAL_DEGREES,

            /// <summary>
            /// <para>Points</para>
            /// <para>Points—Points</para>
            /// <para>点—点</para>
            /// </summary>
            [Description("Points")]
            [GPEnumValue("POINTS")]
            _POINTS,

            /// <summary>
            /// <para>Unknown</para>
            /// <para>Unknown—Unknown</para>
            /// <para>未知 - 未知</para>
            /// </summary>
            [Description("Unknown")]
            [GPEnumValue("UNKNOWN")]
            _UNKNOWN,

        }

        public AnalyzeAirportFeatures SetEnv()
        {
            base.SetEnv();
            return this;
        }

    }

}